2011/10/28

Recent entries from same category

  1. VimConf 2023 Tiny に参加しました
  2. Vim で Go 言語を書くために行った引越し作業 2020年度版
  3. Vim をモダンな IDE に変える LSP の設定
  4. ぼくがかんがえたさいきょうの Vim のこうせい 2019年 年末版
  5. VimConf 2019 を終えて

追記:template-vimはthincaさんの物と名前がバッティングしたので、「音速でコーディング出来る」と言う意味でsonictemplate-vimに改名しました。

既に似たのはあると思うので車輪の再発明臭いけど、僕の好みの奴は見た事無かったので自分で書いた。

欲しかった要件としては
  • 同じファイルタイプだけど、使いたい雛形が数パターンある
  • 初期カーソル位置とか欲しい
  • Perlで「package Foo;」とか埋めてくれたら幸せ
  • Go言語でライブラリ書くときとmain書くときで雛形違うよね
みたいなところ。
mattn/sonictemplate-vim - GitHub

template chooser for vim

https://github.com/mattn/sonictemplate-vim
これを使って # vim foo.pl
と新しいPerlスクリプトファイルを開き :Template <TAB> すると
completing templates
みたいに何個か選べる様になる。scriptを選ぶと use strict;
use warnings;
use utf8;

|
|はカーソルの位置
こんなソースが出て # vim lib/Foo/Bar.pm
の様にPerlのパッケージを開きpackageを選択すると package Foo::Bar;

use strict;
use warnings;
use utf8;

|

1
こんな感じになる。なお、どちらも|の位置がカーソル位置になる。 テンプレートファイルはtemplateフォルダに、名前.ファイルタイプの形式で格納されていて {{_name_}}が拡張子なしのファイル名、{{_cursor_}}がカーソル位置、{{_expr_:XXX}}XXXの位置に好きな式が書ける様になっている。
例えばPerlのパッケージであれば、以下の様にバッファファイル名/path/to/module/lib/Foo/Bar.pmからパッケージ名Foo::Barを作り出している。
package {{_expr_:substitute(substitute(substitute(expand('%'), '.*lib[\\/]', '', 'g'), '[\\/]', '::', 'g'), '\.pm$', '', 'g')}};

use strict;
use warnings;
use utf8;

{{_cursor_}}

1
いまの所

C言語のmainソース

#include <stdio.h>

int
main(int argc, char* argv[]) {
  {{_cursor_}}
  return 0;
}

C++のmainソース

#include <iostream>
#include <string>

int
main(int argc, char* argv[]) {
  {{_cursor_}}
  return 0;
}

Go言語のmainソース

package main

func main() {
    {{_cursor_}}
}

Go言語のパッケージソース

package {{_name_}}

{{_cursor_}}

Perlのパッケージソース

package {{_expr_:substitute(substitute(substitute(expand('%'), '.*lib[\\/]', '', 'g'), '[\\/]', '::', 'g'), '\.pm$', '', 'g')}};

use strict;
use warnings;
use utf8;

{{_cursor_}}

1

Perlのスクリプトソース

use strict;
use warnings;
use utf8;

{{_cursor_}}

Perlのテストスクリプトソース

use strict;
use warnings;
use utf8;
use Test::More;

{{_cursor_}}

おまけでREADME.mkd

{{_expr_:expand("%:p:h:t")}}
{{_expr_:repeat("=", len(expand("%:p:h:t")))}}

Usage:
------
{{_cursor_}}

Requirements:
-------------

Install:
--------

License:
--------

Author:
-------

既にファイルに何かが入力されている時には適用出来ない様になっています。
なお、雛形を募集中なのでこれも入れて欲しい!ってのがあったらgithub上でforkしてpullリクエスト送って下さい。
Posted at by